@strapi/admin 4.0.3 → 4.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/admin/src/components/LeftMenu/index.js +11 -3
- package/admin/src/content-manager/components/DynamicZone/components/DzLabel/index.js +24 -7
- package/admin/src/content-manager/components/DynamicZone/index.js +6 -10
- package/admin/src/content-manager/components/Wysiwyg/Editor.js +2 -3
- package/admin/src/content-manager/components/Wysiwyg/EditorLayout.js +2 -0
- package/admin/src/content-manager/components/Wysiwyg/WysiwygFooter.js +2 -4
- package/admin/src/content-manager/components/Wysiwyg/WysiwygNav.js +67 -62
- package/admin/src/content-manager/components/Wysiwyg/index.js +13 -4
- package/admin/src/translations/en.json +2 -0
- package/build/3742.2281afd7.chunk.js +1 -0
- package/build/4045.0b43d55e.chunk.js +1 -0
- package/build/4261.061aed35.chunk.js +1 -0
- package/build/4672.7ad6782a.chunk.js +1 -0
- package/build/6060.3af8877e.chunk.js +2 -0
- package/build/{6060.a5b86bc2.chunk.js.LICENSE.txt → 6060.3af8877e.chunk.js.LICENSE.txt} +0 -0
- package/build/{6250.11ba8b50.chunk.js → 6250.7b4872b1.chunk.js} +1 -1
- package/build/{5881.746d7dc1.chunk.js → 6354.48168bc8.chunk.js} +2 -2
- package/build/{5881.746d7dc1.chunk.js.LICENSE.txt → 6354.48168bc8.chunk.js.LICENSE.txt} +0 -0
- package/build/{9351.a0fbd4ef.chunk.js → 8530.a978bde6.chunk.js} +2 -2
- package/build/{9351.a0fbd4ef.chunk.js.LICENSE.txt → 8530.a978bde6.chunk.js.LICENSE.txt} +0 -0
- package/build/Admin-authenticatedApp.8c375af0.chunk.js +1 -0
- package/build/{Admin_homePage.62ec13fd.chunk.js → Admin_homePage.f9cdd615.chunk.js} +1 -1
- package/build/{Admin_marketplace.9661a660.chunk.js → Admin_marketplace.4f6c77f2.chunk.js} +1 -1
- package/build/Admin_pluginsPage.cd9a871c.chunk.js +1 -0
- package/build/{Admin_profilePage.67dd744c.chunk.js → Admin_profilePage.077e17a5.chunk.js} +1 -1
- package/build/Admin_settingsPage.9752ef85.chunk.js +1 -0
- package/build/admin-edit-roles-page.27b047fc.chunk.js +1 -0
- package/build/admin-edit-users.a0dede23.chunk.js +1 -0
- package/build/admin-users.a11177c1.chunk.js +1 -0
- package/build/{api-tokens-create-page.830b37b7.chunk.js → api-tokens-create-page.07be3e07.chunk.js} +1 -1
- package/build/{api-tokens-edit-page.dbe07b72.chunk.js → api-tokens-edit-page.d6afc60e.chunk.js} +1 -1
- package/build/{api-tokens-list-page.1626150f.chunk.js → api-tokens-list-page.da9714d8.chunk.js} +1 -1
- package/build/codemirror-css.f9701755.chunk.js +1 -0
- package/build/codemirror-theme.1563c1c2.chunk.js +1 -0
- package/build/content-manager.51651b3b.chunk.js +1 -0
- package/build/{content-type-builder-translation-en-json.c535d180.chunk.js → content-type-builder-translation-en-json.d70fc3af.chunk.js} +1 -1
- package/build/content-type-builder.c815d0c6.chunk.js +1 -0
- package/build/cropper-css.45c47fe3.chunk.js +1 -0
- package/build/email-settings-page.03e18bb2.chunk.js +1 -0
- package/build/{email-translation-dk-json.b3740e8f.chunk.js → email-translation-dk-json.e1480892.chunk.js} +1 -1
- package/build/en-json.9e3c8615.chunk.js +1 -0
- package/build/fontawesome-css-all.9c41f1d7.chunk.js +1 -0
- package/build/fontawesome-css.24c8dbfc.chunk.js +1 -0
- package/build/highlight.js.90b600ee.chunk.js +1 -0
- package/build/{i18n-settings-page.ad670b2c.chunk.js → i18n-settings-page.89d1776c.chunk.js} +1 -1
- package/build/index.html +1 -1
- package/build/main.ca080a1e.js +2 -0
- package/build/{main.b227e163.js.LICENSE.txt → main.ca080a1e.js.LICENSE.txt} +0 -0
- package/build/runtime~main.6f530910.js +1 -0
- package/build/{sk-json.a40bc2c8.chunk.js → sk-json.2eb1ec0d.chunk.js} +1 -1
- package/build/sso-settings-page.d4ab164b.chunk.js +1 -0
- package/build/{upload-settings.f65c4d08.chunk.js → upload-settings.aa148b01.chunk.js} +1 -1
- package/build/{upload-translation-ja-json.71aa85eb.chunk.js → upload-translation-ja-json.568f097e.chunk.js} +1 -1
- package/build/{upload.1e3e2685.chunk.js → upload.1991e997.chunk.js} +1 -1
- package/build/{users-advanced-settings-page.da9830fd.chunk.js → users-advanced-settings-page.23ed7ee9.chunk.js} +1 -1
- package/build/users-email-settings-page.64dc429a.chunk.js +1 -0
- package/build/{users-permissions-translation-ru-json.5709c5a0.chunk.js → users-permissions-translation-ru-json.44dd1f10.chunk.js} +1 -1
- package/build/users-providers-settings-page.329f102a.chunk.js +1 -0
- package/build/users-roles-settings-page.e28982b6.chunk.js +1 -0
- package/build/{webhook-edit-page.c87c6764.chunk.js → webhook-edit-page.678af4e2.chunk.js} +1 -1
- package/build/{webhook-list-page.8abf0b5f.chunk.js → webhook-list-page.5abda9c2.chunk.js} +1 -1
- package/package.json +5 -5
- package/build/4261.b7b7ac00.chunk.js +0 -1
- package/build/4362.1cf3ccbd.chunk.js +0 -1
- package/build/6060.a5b86bc2.chunk.js +0 -2
- package/build/849.4a7be1c0.chunk.js +0 -1
- package/build/9238.63386655.chunk.js +0 -1
- package/build/Admin-authenticatedApp.956e0be7.chunk.js +0 -1
- package/build/Admin_pluginsPage.7d1bd7ce.chunk.js +0 -1
- package/build/Admin_settingsPage.73423460.chunk.js +0 -1
- package/build/admin-edit-roles-page.2d1b6461.chunk.js +0 -1
- package/build/admin-edit-users.e736db15.chunk.js +0 -1
- package/build/admin-users.62447405.chunk.js +0 -1
- package/build/codemirror-css.17bc19d4.chunk.js +0 -1
- package/build/codemirror-theme.b5559efc.chunk.js +0 -1
- package/build/content-manager.0872e65e.chunk.js +0 -1
- package/build/content-type-builder.44fdf56b.chunk.js +0 -1
- package/build/cropper-css.ace19575.chunk.js +0 -1
- package/build/email-settings-page.3cdedf03.chunk.js +0 -1
- package/build/en-json.1c33de7f.chunk.js +0 -1
- package/build/fontawesome-css-all.3b89f909.chunk.js +0 -1
- package/build/fontawesome-css.ef93ee2a.chunk.js +0 -1
- package/build/highlight.js.6321cb45.chunk.js +0 -1
- package/build/main.b227e163.js +0 -2
- package/build/runtime~main.d7a87b81.js +0 -1
- package/build/sso-settings-page.c073b6d7.chunk.js +0 -1
- package/build/users-email-settings-page.678794aa.chunk.js +0 -1
- package/build/users-providers-settings-page.d4f78a77.chunk.js +0 -1
- package/build/users-roles-settings-page.4f04bf06.chunk.js +0 -1
|
@@ -80,12 +80,20 @@ const LeftMenu = ({ generalSectionLinks, pluginsSectionLinks }) => {
|
|
|
80
80
|
}
|
|
81
81
|
};
|
|
82
82
|
|
|
83
|
+
const menuTitle = formatMessage({
|
|
84
|
+
id: 'app.components.LeftMenu.navbrand.title',
|
|
85
|
+
defaultMessage: 'Strapi Dashboard',
|
|
86
|
+
});
|
|
87
|
+
|
|
83
88
|
return (
|
|
84
89
|
<MainNav condensed={condensed}>
|
|
85
90
|
<NavBrand
|
|
86
|
-
workplace=
|
|
87
|
-
|
|
88
|
-
|
|
91
|
+
workplace={formatMessage({
|
|
92
|
+
id: 'app.components.LeftMenu.navbrand.workplace',
|
|
93
|
+
defaultMessage: 'Workplace',
|
|
94
|
+
})}
|
|
95
|
+
title={menuTitle}
|
|
96
|
+
icon={<img src={menuLogo} alt={menuTitle} />}
|
|
89
97
|
/>
|
|
90
98
|
|
|
91
99
|
<Divider />
|
|
@@ -17,7 +17,7 @@ const StyledBox = styled(Box)`
|
|
|
17
17
|
border-radius: ${pxToRem(26)};
|
|
18
18
|
`;
|
|
19
19
|
|
|
20
|
-
const DzLabel = ({ label, labelAction, name, numberOfComponents, required }) => {
|
|
20
|
+
const DzLabel = ({ label, labelAction, name, numberOfComponents, required, intlDescription }) => {
|
|
21
21
|
const { formatMessage } = useIntl();
|
|
22
22
|
const intlLabel = formatMessage({ id: label || name, defaultMessage: label || name });
|
|
23
23
|
|
|
@@ -33,12 +33,24 @@ const DzLabel = ({ label, labelAction, name, numberOfComponents, required }) =>
|
|
|
33
33
|
shadow="filterShadow"
|
|
34
34
|
color="neutral500"
|
|
35
35
|
>
|
|
36
|
-
<Flex>
|
|
37
|
-
<
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
36
|
+
<Flex direction="column" justifyContent="center">
|
|
37
|
+
<Flex maxWidth={pxToRem(356)}>
|
|
38
|
+
<Typography variant="pi" textColor="neutral600" fontWeight="bold" ellipsis>
|
|
39
|
+
{intlLabel}
|
|
40
|
+
</Typography>
|
|
41
|
+
<Typography variant="pi" textColor="neutral600" fontWeight="bold">
|
|
42
|
+
({numberOfComponents})
|
|
43
|
+
</Typography>
|
|
44
|
+
{required && <Typography textColor="danger600">*</Typography>}
|
|
45
|
+
{labelAction && <Box paddingLeft={1}>{labelAction}</Box>}
|
|
46
|
+
</Flex>
|
|
47
|
+
{intlDescription && (
|
|
48
|
+
<Box paddingTop={1} maxWidth={pxToRem(356)}>
|
|
49
|
+
<Typography variant="pi" textColor="neutral600" ellipsis>
|
|
50
|
+
{formatMessage(intlDescription)}
|
|
51
|
+
</Typography>
|
|
52
|
+
</Box>
|
|
53
|
+
)}
|
|
42
54
|
</Flex>
|
|
43
55
|
</StyledBox>
|
|
44
56
|
</Box>
|
|
@@ -47,12 +59,17 @@ const DzLabel = ({ label, labelAction, name, numberOfComponents, required }) =>
|
|
|
47
59
|
};
|
|
48
60
|
|
|
49
61
|
DzLabel.defaultProps = {
|
|
62
|
+
intlDescription: undefined,
|
|
50
63
|
label: '',
|
|
51
64
|
labelAction: undefined,
|
|
52
65
|
required: false,
|
|
53
66
|
};
|
|
54
67
|
|
|
55
68
|
DzLabel.propTypes = {
|
|
69
|
+
intlDescription: PropTypes.shape({
|
|
70
|
+
id: PropTypes.string.isRequired,
|
|
71
|
+
defaultMessage: PropTypes.string.isRequired,
|
|
72
|
+
}),
|
|
56
73
|
label: PropTypes.string,
|
|
57
74
|
labelAction: PropTypes.element,
|
|
58
75
|
name: PropTypes.string.isRequired,
|
|
@@ -39,6 +39,9 @@ const DynamicZone = ({
|
|
|
39
39
|
const [isOpen, setIsOpen] = useState(false);
|
|
40
40
|
const [shouldOpenAddedComponent, setShouldOpenAddedComponent] = useState(false);
|
|
41
41
|
const dynamicDisplayedComponentsLength = dynamicDisplayedComponents.length;
|
|
42
|
+
const intlDescription = metadatas.description
|
|
43
|
+
? { id: metadatas.description, defaultMessage: metadatas.description }
|
|
44
|
+
: null;
|
|
42
45
|
|
|
43
46
|
const [componentCollapses, setComponentsCollapses] = useState(
|
|
44
47
|
createCollapses(dynamicDisplayedComponentsLength)
|
|
@@ -159,11 +162,7 @@ const DynamicZone = ({
|
|
|
159
162
|
if (!isFieldAllowed && isCreatingEntry) {
|
|
160
163
|
return (
|
|
161
164
|
<NotAllowedInput
|
|
162
|
-
description={
|
|
163
|
-
metadatas.description
|
|
164
|
-
? { id: metadatas.description, defaultMessage: metadatas.description }
|
|
165
|
-
: null
|
|
166
|
-
}
|
|
165
|
+
description={intlDescription}
|
|
167
166
|
intlLabel={{ id: metadatas.label, defaultMessage: metadatas.label }}
|
|
168
167
|
labelAction={labelAction}
|
|
169
168
|
name={name}
|
|
@@ -174,11 +173,7 @@ const DynamicZone = ({
|
|
|
174
173
|
if (!isFieldAllowed && !isFieldReadable && !isCreatingEntry) {
|
|
175
174
|
return (
|
|
176
175
|
<NotAllowedInput
|
|
177
|
-
description={
|
|
178
|
-
metadatas.description
|
|
179
|
-
? { id: metadatas.description, defaultMessage: metadatas.description }
|
|
180
|
-
: null
|
|
181
|
-
}
|
|
176
|
+
description={intlDescription}
|
|
182
177
|
intlLabel={{ id: metadatas.label, defaultMessage: metadatas.label }}
|
|
183
178
|
labelAction={labelAction}
|
|
184
179
|
name={name}
|
|
@@ -191,6 +186,7 @@ const DynamicZone = ({
|
|
|
191
186
|
{dynamicDisplayedComponentsLength > 0 && (
|
|
192
187
|
<Box>
|
|
193
188
|
<DzLabel
|
|
189
|
+
intlDescription={intlDescription}
|
|
194
190
|
label={metadatas.label}
|
|
195
191
|
labelAction={labelAction}
|
|
196
192
|
name={name}
|
|
@@ -25,9 +25,8 @@ const Editor = ({
|
|
|
25
25
|
lineWrapping: true,
|
|
26
26
|
extraKeys: {
|
|
27
27
|
Enter: 'newlineAndIndentContinueMarkdownList',
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
// 'Shift-Tab': false,
|
|
28
|
+
Tab: false,
|
|
29
|
+
'Shift-Tab': false,
|
|
31
30
|
},
|
|
32
31
|
readOnly: false,
|
|
33
32
|
smartIndent: false,
|
|
@@ -68,6 +68,7 @@ export const EditorLayout = ({ children, isExpandMode, error, previewContent, on
|
|
|
68
68
|
bottom={0}
|
|
69
69
|
zIndex={4}
|
|
70
70
|
justifyContent="center"
|
|
71
|
+
onClick={onCollapse}
|
|
71
72
|
>
|
|
72
73
|
<Box
|
|
73
74
|
id="wysiwyg-expand"
|
|
@@ -77,6 +78,7 @@ export const EditorLayout = ({ children, isExpandMode, error, previewContent, on
|
|
|
77
78
|
overflow="hidden"
|
|
78
79
|
width="70%"
|
|
79
80
|
height="70%"
|
|
81
|
+
onClick={e => e.stopPropagation()}
|
|
80
82
|
>
|
|
81
83
|
<Flex height="100%" alignItems="flex-start">
|
|
82
84
|
<BoxWithBorder flex="1" height="100%">
|
|
@@ -7,13 +7,13 @@ import { Typography } from '@strapi/design-system/Typography';
|
|
|
7
7
|
import Expand from '@strapi/icons/Expand';
|
|
8
8
|
import { ExpandButton } from './WysiwygStyles';
|
|
9
9
|
|
|
10
|
-
const WysiwygFooter = ({
|
|
10
|
+
const WysiwygFooter = ({ onToggleExpand }) => {
|
|
11
11
|
const { formatMessage } = useIntl();
|
|
12
12
|
|
|
13
13
|
return (
|
|
14
14
|
<Box padding={2} background="neutral100" hasRadius>
|
|
15
15
|
<Flex justifyContent="flex-end" alignItems="flex-end">
|
|
16
|
-
<ExpandButton id="expand"
|
|
16
|
+
<ExpandButton id="expand" onClick={onToggleExpand}>
|
|
17
17
|
<Typography>
|
|
18
18
|
{formatMessage({
|
|
19
19
|
id: 'components.WysiwygBottomControls.fullscreen',
|
|
@@ -29,12 +29,10 @@ const WysiwygFooter = ({ isPreviewMode, onToggleExpand }) => {
|
|
|
29
29
|
|
|
30
30
|
WysiwygFooter.defaultProps = {
|
|
31
31
|
onToggleExpand: () => {},
|
|
32
|
-
isPreviewMode: false,
|
|
33
32
|
};
|
|
34
33
|
|
|
35
34
|
WysiwygFooter.propTypes = {
|
|
36
35
|
onToggleExpand: PropTypes.func,
|
|
37
|
-
isPreviewMode: PropTypes.bool,
|
|
38
36
|
};
|
|
39
37
|
|
|
40
38
|
export default WysiwygFooter;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import React, { useRef, useState } from 'react';
|
|
2
2
|
import PropTypes from 'prop-types';
|
|
3
3
|
import { useIntl } from 'react-intl';
|
|
4
|
+
import { FocusTrap } from '@strapi/design-system/FocusTrap';
|
|
4
5
|
import { Box } from '@strapi/design-system/Box';
|
|
5
6
|
import { Button } from '@strapi/design-system/Button';
|
|
6
7
|
import { IconButtonGroup } from '@strapi/design-system/IconButton';
|
|
@@ -41,7 +42,9 @@ const WysiwygNav = ({
|
|
|
41
42
|
});
|
|
42
43
|
const buttonMoreRef = useRef();
|
|
43
44
|
|
|
44
|
-
const handleTogglePopover = () =>
|
|
45
|
+
const handleTogglePopover = () => {
|
|
46
|
+
setVisiblePopover(prev => !prev);
|
|
47
|
+
};
|
|
45
48
|
|
|
46
49
|
if (isPreviewMode) {
|
|
47
50
|
return (
|
|
@@ -81,10 +84,10 @@ const WysiwygNav = ({
|
|
|
81
84
|
/>
|
|
82
85
|
</MainButtons>
|
|
83
86
|
|
|
84
|
-
<MoreButton disabled
|
|
87
|
+
<MoreButton disabled id="more" label="More" icon={<More />} />
|
|
85
88
|
</Flex>
|
|
86
89
|
|
|
87
|
-
<Button onClick={onTogglePreviewMode} variant="tertiary"
|
|
90
|
+
<Button onClick={onTogglePreviewMode} variant="tertiary" id="preview">
|
|
88
91
|
{formatMessage({
|
|
89
92
|
id: 'components.Wysiwyg.ToggleMode.markdown-mode',
|
|
90
93
|
defaultMessage: 'Markdown mode',
|
|
@@ -146,65 +149,67 @@ const WysiwygNav = ({
|
|
|
146
149
|
/>
|
|
147
150
|
{visiblePopover && (
|
|
148
151
|
<Popover centered source={buttonMoreRef} spacing={4} id="popover">
|
|
149
|
-
<
|
|
150
|
-
<
|
|
151
|
-
<
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
<
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
152
|
+
<FocusTrap onEscape={handleTogglePopover}>
|
|
153
|
+
<Flex>
|
|
154
|
+
<IconButtonGroupMargin>
|
|
155
|
+
<CustomIconButton
|
|
156
|
+
onClick={() => onActionClick('Strikethrough', editorRef, handleTogglePopover)}
|
|
157
|
+
id="Strikethrough"
|
|
158
|
+
label="Strikethrough"
|
|
159
|
+
name="Strikethrough"
|
|
160
|
+
icon={<Strikethrough />}
|
|
161
|
+
/>
|
|
162
|
+
<CustomIconButton
|
|
163
|
+
onClick={() => onActionClick('BulletList', editorRef, handleTogglePopover)}
|
|
164
|
+
id="BulletList"
|
|
165
|
+
label="BulletList"
|
|
166
|
+
name="BulletList"
|
|
167
|
+
icon={<BulletList />}
|
|
168
|
+
/>
|
|
169
|
+
<CustomIconButton
|
|
170
|
+
onClick={() => onActionClick('NumberList', editorRef, handleTogglePopover)}
|
|
171
|
+
id="NumberList"
|
|
172
|
+
label="NumberList"
|
|
173
|
+
name="NumberList"
|
|
174
|
+
icon={<NumberList />}
|
|
175
|
+
/>
|
|
176
|
+
</IconButtonGroupMargin>
|
|
177
|
+
<IconButtonGroup>
|
|
178
|
+
<CustomIconButton
|
|
179
|
+
onClick={() => onActionClick('Code', editorRef, handleTogglePopover)}
|
|
180
|
+
id="Code"
|
|
181
|
+
label="Code"
|
|
182
|
+
name="Code"
|
|
183
|
+
icon={<Code />}
|
|
184
|
+
/>
|
|
185
|
+
<CustomIconButton
|
|
186
|
+
onClick={() => {
|
|
187
|
+
handleTogglePopover();
|
|
188
|
+
onToggleMediaLib();
|
|
189
|
+
}}
|
|
190
|
+
id="Image"
|
|
191
|
+
label="Image"
|
|
192
|
+
name="Image"
|
|
193
|
+
icon={<Image />}
|
|
194
|
+
/>
|
|
195
|
+
<CustomLinkIconButton
|
|
196
|
+
onClick={() => onActionClick('Link', editorRef, handleTogglePopover)}
|
|
197
|
+
id="Link"
|
|
198
|
+
label="Link"
|
|
199
|
+
name="Link"
|
|
200
|
+
// eslint-disable-next-line jsx-a11y/anchor-is-valid
|
|
201
|
+
icon={<Link />}
|
|
202
|
+
/>
|
|
203
|
+
<CustomIconButton
|
|
204
|
+
onClick={() => onActionClick('Quote', editorRef, handleTogglePopover)}
|
|
205
|
+
id="Quote"
|
|
206
|
+
label="Quote"
|
|
207
|
+
name="Quote"
|
|
208
|
+
icon={<Quote />}
|
|
209
|
+
/>
|
|
210
|
+
</IconButtonGroup>
|
|
211
|
+
</Flex>
|
|
212
|
+
</FocusTrap>
|
|
208
213
|
</Popover>
|
|
209
214
|
)}
|
|
210
215
|
</Flex>
|
|
@@ -26,6 +26,10 @@ const LabelAction = styled(Box)`
|
|
|
26
26
|
}
|
|
27
27
|
`;
|
|
28
28
|
|
|
29
|
+
const TypographyAsterisk = styled(Typography)`
|
|
30
|
+
line-height: 0;
|
|
31
|
+
`;
|
|
32
|
+
|
|
29
33
|
const Wysiwyg = ({
|
|
30
34
|
description,
|
|
31
35
|
disabled,
|
|
@@ -36,6 +40,7 @@ const Wysiwyg = ({
|
|
|
36
40
|
onChange,
|
|
37
41
|
placeholder,
|
|
38
42
|
value,
|
|
43
|
+
required,
|
|
39
44
|
}) => {
|
|
40
45
|
const { formatMessage } = useIntl();
|
|
41
46
|
const textareaRef = useRef(null);
|
|
@@ -49,7 +54,10 @@ const Wysiwyg = ({
|
|
|
49
54
|
|
|
50
55
|
const handleToggleMediaLib = () => setMediaLibVisible(prev => !prev);
|
|
51
56
|
const handleTogglePreviewMode = () => setIsPreviewMode(prev => !prev);
|
|
52
|
-
const handleToggleExpand = () =>
|
|
57
|
+
const handleToggleExpand = () => {
|
|
58
|
+
setIsPreviewMode(false);
|
|
59
|
+
setIsExpandMode(prev => !prev);
|
|
60
|
+
};
|
|
53
61
|
|
|
54
62
|
const handleActionClick = (value, currentEditorRef, togglePopover) => {
|
|
55
63
|
switch (value) {
|
|
@@ -124,6 +132,7 @@ const Wysiwyg = ({
|
|
|
124
132
|
<Stack horizontal size={1}>
|
|
125
133
|
<Typography variant="pi" fontWeight="bold" textColor="neutral800">
|
|
126
134
|
{label}
|
|
135
|
+
{required && <TypographyAsterisk textColor="danger600">*</TypographyAsterisk>}
|
|
127
136
|
</Typography>
|
|
128
137
|
{labelAction && <LabelAction paddingLeft={1}>{labelAction}</LabelAction>}
|
|
129
138
|
</Stack>
|
|
@@ -154,9 +163,7 @@ const Wysiwyg = ({
|
|
|
154
163
|
value={value}
|
|
155
164
|
/>
|
|
156
165
|
|
|
157
|
-
{!isExpandMode &&
|
|
158
|
-
<WysiwygFooter isPreviewMode={isPreviewMode} onToggleExpand={handleToggleExpand} />
|
|
159
|
-
)}
|
|
166
|
+
{!isExpandMode && <WysiwygFooter onToggleExpand={handleToggleExpand} />}
|
|
160
167
|
</EditorLayout>
|
|
161
168
|
<Hint description={description} name={name} error={error} />
|
|
162
169
|
</Stack>
|
|
@@ -182,6 +189,7 @@ Wysiwyg.defaultProps = {
|
|
|
182
189
|
error: '',
|
|
183
190
|
labelAction: undefined,
|
|
184
191
|
placeholder: null,
|
|
192
|
+
required: false,
|
|
185
193
|
value: '',
|
|
186
194
|
};
|
|
187
195
|
|
|
@@ -206,6 +214,7 @@ Wysiwyg.propTypes = {
|
|
|
206
214
|
defaultMessage: PropTypes.string.isRequired,
|
|
207
215
|
values: PropTypes.object,
|
|
208
216
|
}),
|
|
217
|
+
required: PropTypes.bool,
|
|
209
218
|
value: PropTypes.string,
|
|
210
219
|
};
|
|
211
220
|
|
|
@@ -284,6 +284,8 @@
|
|
|
284
284
|
"app.components.LeftMenu.expand": "Expand the navbar",
|
|
285
285
|
"app.components.LeftMenu.logout": "Logout",
|
|
286
286
|
"app.components.LeftMenu.profile": "Profile",
|
|
287
|
+
"app.components.LeftMenu.navbrand.title": "Strapi Dashboard",
|
|
288
|
+
"app.components.LeftMenu.navbrand.workplace": "Workplace",
|
|
287
289
|
"app.components.LeftMenuFooter.documentation": "Documentation",
|
|
288
290
|
"app.components.LeftMenuFooter.help": "Help",
|
|
289
291
|
"app.components.LeftMenuFooter.poweredBy": "Powered by ",
|